package com.totoro.service;

import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.util.CellRangeAddress;
import org.springframework.web.servlet.view.document.AbstractExcelView;

import com.totoro.domain.Student;
/**
 * 
 * @author zhangpeng
 * 
 * 导出Excel表单；
 *
 */
public class StudentExcelService extends AbstractExcelView {
	
	@Override
	protected void buildExcelDocument(Map<String, Object> model,
			HSSFWorkbook workbook, HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		
		//响应报文头的处理：
		response.setHeader("Content-Disposition", 
				"inline;filename="+new String(
						"学生信息表.xls".getBytes(), 
						"iso8859-1"));
		
		
		 // 创建单元格样式  
	    HSSFCellStyle cellStyle = workbook.createCellStyle();
	    HSSFCellStyle cellStyle2 = workbook.createCellStyle();

	    // 指定单元格居中对齐  
	    cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); 
	    cellStyle2.setAlignment(HSSFCellStyle.ALIGN_CENTER); 

	    // 指定单元格垂直居中对齐  
	    cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);  
	    cellStyle2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
	    
	    // 指定当单元格内容显示不下时自动换行  
	    cellStyle.setWrapText(true); 
	    cellStyle2.setWrapText(true);

	    // 设置单元格字体  
	    HSSFFont font = workbook.createFont();  
	    font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);  
	    font.setFontName("宋体");  
	    font.setFontHeight((short) 200); 
	    cellStyle.setFont(font); 
	    
	    @SuppressWarnings("unchecked")
		List<Student> studentList = (List<Student>)model.get("studentList");
		
		//在Excel工作簿中建一工作表，工作表名：表单-Student(可以缺省)：
		HSSFSheet sheet = workbook.createSheet("表单-Student");
		
		//Cell的宽度,正常的宽度1800左右；
		this.setColumns(sheet, 5000);
		
		int rowNum = 0;
		{
			//在sheet中创建一个新行（题目）
			HSSFRow title = sheet.createRow(rowNum++);		
			//合并单元格：将0行0列至0行2列的单元格合并为一个单元格
			sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2));
			//创建题目行中，第一个，也是惟一单元格
			Cell cell = title.createCell(0);
			//为题目单元格赋值
			cell.setCellValue("毕业设计题目申报");	
			cell.setCellStyle(cellStyle);
		}
		
		//处理表头
		{
			//在sheet中创建一个新行（表头）
			HSSFRow header = sheet.createRow(rowNum++);
			//为新行创建、填充多个单元格
			int i=0;
			Cell cell1 = header.createCell(i++);
			cell1.setCellValue("ID");	
			cell1.setCellStyle(cellStyle);
			
			Cell cell2 = header.createCell(i++);
			cell2.setCellValue("姓名");
			cell2.setCellStyle(cellStyle);
			
			Cell cell3 = header.createCell(i++);
			cell3.setCellValue("密码");
			cell3.setCellStyle(cellStyle);
		}
		
		//处理表体
		for(Student student : studentList)
		 {
			//在sheet中创建另一个新行（表体）
			HSSFRow row = sheet.createRow(rowNum++);
			//为新行创建、填充多个单元格
			int column = 0;
			Cell cell1 = row.createCell(column++);
			cell1.setCellValue(student.getId());	
			cell1.setCellStyle(cellStyle2);
			
			Cell cell2 = row.createCell(column++);
			cell2.setCellValue(student.getName());
			cell2.setCellStyle(cellStyle2);
			
			Cell cell3 = row.createCell(column++);
			cell3.setCellValue(student.getPwd());
			cell3.setCellStyle(cellStyle2);
		}
	}
	
	
	/**
	 * 设置列宽
	 * @param sheet 工作表
	 * @param fontSize 宽度
	 */
	private void setColumns(HSSFSheet sheet, int columnWidth) {
		sheet.setColumnWidth(0, 2000);//第一列的宽度；
		sheet.setColumnWidth(1, columnWidth);//第二列的宽度；
		sheet.setColumnWidth(2, columnWidth);//第二列的宽度；
	}
}
